package frontmatter

import (
	"fmt"
	"strings"

	"gopkg.in/yaml.v3"
)

const SEPARATOR_NOT_FOUND = -1

// 查找frontmatter结束的---的索引
func findSecondSeparatorIndex(content string) int {
	// 查找第一个 `substr` 的位置
	firstIndex := getSeparatorIndex(content)
	if firstIndex == SEPARATOR_NOT_FOUND {
		return SEPARATOR_NOT_FOUND
	}

	// 查找第二个 `substr` 的位置
	secondIndex := getSeparatorIndex(content[firstIndex+SEPARATOR_LENGTH:])
	if secondIndex == SEPARATOR_NOT_FOUND {
		// 如果找不到第二个 `substr`，返回 SEPARATOR_NOT_FOUND
		return SEPARATOR_NOT_FOUND
	}

	return secondIndex + SEPARATOR_LENGTH
}

func getSeparatorIndex(content string) int {
	// 查找结束的 `---` 部分
	index := strings.Index(content, SEPARATOR_WITH_LF)
	if index == SEPARATOR_NOT_FOUND {
		index = strings.Index(content, SEPARATOR_WITH_CRLF)
	}
	return index
}

// 解析 Frontmatter 部分
func Parse(content string) (Frontmatter, error) {
	var newFrontmatter Frontmatter
	// 查找结束的 `---` 部分
	endIndex := findSecondSeparatorIndex(content)
	if endIndex == SEPARATOR_NOT_FOUND {
		return newFrontmatter, fmt.Errorf("frontmatter格式错误")
	}
	// 解析前段 YAML 内容
	err := yaml.Unmarshal([]byte(content[len(SEPARATOR):endIndex]), &newFrontmatter)
	if err != nil {
		return newFrontmatter, fmt.Errorf("解析frontmatter格式遇到错误: %v", err)
	}
	if newFrontmatter.Createtime != "" {
		newFrontmatter.Createtime = strings.TrimSpace(newFrontmatter.Createtime)
	}
	if newFrontmatter.Updatetime != "" {
		newFrontmatter.Updatetime = strings.TrimSpace(newFrontmatter.Updatetime)
	}
	newFrontmatter.SecondIndex = endIndex

	return newFrontmatter, nil
}
